#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import sys
from pathlib import Path
import pandas as pd
import argparse
from tqdm import tqdm

from src.enhanced_analyzer import EnhancedScoreAnalyzer
from src.excel_report import ExcelReportGenerator

def main():
    """主程序入口"""
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='学生成绩分析系统')
    parser.add_argument('--data-dir', type=str, default='data', 
                        help='成绩数据目录路径')
    parser.add_argument('--output-dir', type=str, default='output',
                        help='输出目录路径')
    parser.add_argument('--student-id', type=str, default=None,
                        help='指定学生准考证号，如果不指定则分析所有学生')
    args = parser.parse_args()
    
    # 获取项目根目录
    root_dir = Path(__file__).parent
    
    # 设置数据目录和输出目录
    data_dir = root_dir / args.data_dir
    output_dir = root_dir / args.output_dir
    
    # 确保输出目录存在
    output_dir.mkdir(parents=True, exist_ok=True)
    
    # 初始化分析器
    analyzer = EnhancedScoreAnalyzer()
    
    # 加载所有考试数据
    print("正在加载考试数据...")
    exam_files = list(data_dir.glob('*.xlsx'))
    
    if not exam_files:
        print(f"错误: 在 {data_dir} 目录下未找到任何Excel文件")
        sys.exit(1)
    
    for file_path in tqdm(exam_files, desc="加载考试文件"):
        try:
            exam_info = analyzer.load_exam_file(file_path)
            print(f"已加载 {exam_info['exam_type']} 考试数据")
        except Exception as e:
            print(f"加载文件 {file_path.name} 时出错: {e}")
    
    # 初始化报告生成器
    report_generator = ExcelReportGenerator(output_dir)
    
    # 获取所有学生列表
    all_students = analyzer.get_all_students()
    
    if not all_students:
        print("错误: 未找到任何学生数据")
        sys.exit(1)
    
    print(f"共找到 {len(all_students)} 名学生")
    
    # 如果指定了学生ID，则只分析该学生
    if args.student_id:
        students_to_analyze = [s for s in all_students if s['id'] == args.student_id]
        if not students_to_analyze:
            print(f"错误: 未找到准考证号为 {args.student_id} 的学生")
            sys.exit(1)
    else:
        students_to_analyze = all_students
    
    # 为每个学生生成分析报告
    print("正在生成学生成绩分析报告...")
    for student in tqdm(students_to_analyze, desc="生成报告"):
        try:
            # 分析学生成绩
            analysis_result, exam_data = analyzer.analyze_student(student['id'])
            
            # 生成Excel报告
            report_generator.generate(analysis_result, student['name'], student['id'], exam_data)
            
            print(f"已生成学生 {student['name']}({student['id']}) 的成绩分析报告")
        except Exception as e:
            print(f"生成学生 {student['name']}({student['id']}) 的报告时出错: {e}")
    
    print(f"所有报告已生成完毕，保存在 {output_dir / 'students_excel'} 目录下")

if __name__ == "__main__":
    main() 